package com.zhiqian.community.dao;

import com.zhiqian.community.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
@SuppressWarnings("all")
public interface MessageMapper {
    /**
     * 查询当前用户的会话列表，每个会话只查询一条最新的私信
     */
    List<Message> queryConversations(@Param("userId") Integer userId,@Param("offset") int offset,@Param("limit") int limit);

    /**
     * 查询会话详情
     * @param conversationId
     * @param offset
     * @param limit
     * @return
     */
    List<Message> queryMessageList(@Param("conversationId") String conversationId,@Param("offset") int offset,@Param("limit") int limit);

    /**
     * 查看当前用户会话数量
     * @param userId
     * @return
     */
    int selectConversationsCount(Integer userId);

    /**
     * 查询某个会话的消息数量
     * @param conversationId
     * @return
     */
    int selectLetterCount(String conversationId);

    /**
     * 查询未读的消息数量
     * @param conversationId
     * @return
     */
    int selectLetterUnreadCount(@Param("userId") Integer userId,@Param("conversationId") String conversationId);

    /**
     * 添加会话消息
     * @param message
     * @return
     */
    int insertLetter(Message message);

    /**
     * 修改消息状态
     * @param status
     * @return
     */
    int updateLetterStatus(@Param("ids") List ids,@Param("status") Integer status);

    /**
     * 查询用户的通知列表
     * @return
     */
    Message queryLatestInform(@Param("userId") Integer userId,@Param("topic")String topic);

    /**
     * 查看用户指定主题通知的未读数量
     * @param topic
     * @return
     */
    int selectTopicUnreadCount(@Param("userId") Integer userId,@Param("topic") String topic);

    /**
     * 查看用户指定主题的详情列表
     * @param userId
     * @param topic
     * @param offset
     * @param limit
     * @return
     */
    List<Message> queryTopicMessageList(@Param("userId") Integer userId,@Param("topic") String topic,@Param("offset")int offset,@Param("limit")int limit);

    /**
     * 查询用户指定主题的通知数量
     * @param userId
     * @param topic
     * @return
     */
    int selectTopicCount(@Param("userId")Integer userId,@Param("topic")String topic);

    /**
     * 查询用户总的未读消息数
     * @param userId
     * @return
     */
    int selectUserUnreadMessageCount(Integer userId);

    /**
     * 添加发布帖子通知
     * @param ids
     * @return
     */
    int insertUserPublishInform(@Param("ids") List<Message> ids);
}
